package interfaces;

import java.util.*;
import java.rmi.*;

/*
  Cette interface met en place les différentes fonctions qui seront utilisées 
  pour le serveur.
*/

public interface ServeurITF extends Remote {
	
	/*
	   Methodes de get sur les données du serveur.
	   On ne met pas de set en place.
	*/
	public String getHost() throws RemoteException;
	public int getPort() throws RemoteException;
	
	/*
	   Ajoute le client dans la iste de clients du serveur ;
	   une seule connexion en meme temps, un timer gere les double
	   connexions ;
	   Le client sait si la connexion à été refusée grâce au retour.
	*/
	public boolean connect(ClientITF client) throws RemoteException;
	
	/*
	   Retire le client de la liste de clients.
	*/
	public void disconnect(ClientITF client) throws RemoteException;

	/*
	   Renvoie au demandeur le nombre de clients que connait le serveur.
	*/
	public int nbClients() throws RemoteException;
	
	/*
	  Renvoie le client correspondant à un ID
	*/
	public ClientITF getByID(Vector<ClientITF> list, int id) throws RemoteException;
	
	/*
	   Renvoie le graphe complet
	*/
	public String printGraph() throws RemoteException;

	/*
	   Renvoie zero, un ou deux clients au client demandeur. Ces clients
	   seront ses voisins directs, les seuls qu'il pourra contacter
	   directement ;
	   Contacte les voisins du nouveau client afin qu'ils ajoutent le client
	   a leur voisinage.
	*/
	public Vector neighbourhood(ClientITF client) throws RemoteException;
	
	/*
	   Verifie si le client appartient à la banlist.
	*/
	public boolean isBanned(ClientITF client) throws RemoteException;
	
	/*
	   Bannit le client.
	*/
	public void addToBanList(ClientITF client) throws RemoteException;

	/*
	   Autorise le client.
	*/
	public void removeFromBanList(ClientITF client) throws RemoteException;

	/*
	   Informe la machine élue du résultat d'une élection
	*/
	public void resultatElection(int idElu, ClientITF sender) throws RemoteException;

	/*
	   Allume le serveur, autorise la connexion de clients.
	*/
	public void switchOn() throws RemoteException;

	/*
	   Eteint le serveur, deconnecte tous les clients, interdit la connexion
	   d'un nouveau client.
	*/
	public void switchOff() throws RemoteException;
}
